home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / interfaces3_5.lha / Interfaces / GadTools.mod < prev    next >
Text File  |  1994-03-05  |  24KB  |  559 lines

  1. (*
  2. (*
  3. **  Amiga Oberon Interface Module:
  4. **  $VER: GadTools.mod 40.15 (28.12.93) Oberon 3.0
  5. **
  6. **   © 1993 by Fridtjof Siebert
  7. **   updated for V39, V40 by hartmut Goebel
  8. *)
  9. *)
  10.  
  11. MODULE GadTools;
  12.  
  13. IMPORT
  14.   e   * := Exec,
  15.   u   * := Utility,
  16.   I   * := Intuition,
  17.   g   * := Graphics,
  18.   SYSTEM *;
  19.  
  20. CONST
  21.   gadtoolsName * = "gadtools.library";
  22.  
  23.  
  24. (*------------------------------------------------------------------------*)
  25. CONST
  26.  
  27. (* The kinds (almost classes) of gadgets that GadTools supports.
  28.  * Use these identifiers when calling CreateGadgetA()
  29.  *)
  30.  
  31.   genericKind    * = 0;
  32.   buttonKind     * = 1;
  33.   checkBoxKind   * = 2;
  34.   integerKind    * = 3;
  35.   listViewKind   * = 4;
  36.   mxKind         * = 5;
  37.   numberKind     * = 6;
  38.   cycleKind      * = 7;
  39.   paletteKind    * = 8;
  40.   scrollerKind   * = 9;
  41. (* Kind number 10 is reserved *)
  42.   sliderKind     * = 11;
  43.   stringKind     * = 12;
  44.   textKind       * = 13;
  45.  
  46.   numKinds       * = 14;
  47.  
  48. (*------------------------------------------------------------------------*)
  49.  
  50. (*  'Or' the appropriate set together for your Window IDCMPFlags: *)
  51.  
  52.   arrowIDCMP      * = LONGSET{I.gadgetUp,I.gadgetDown,I.intuiTicks,I.mouseButtons};
  53.  
  54.   buttonIDCMP     * = LONGSET{I.gadgetUp};
  55.   checkBoxIDCMP   * = LONGSET{I.gadgetUp};
  56.   integerIDCMP    * = LONGSET{I.gadgetUp};
  57.   listViewIDCMP   * = LONGSET{I.gadgetUp,I.gadgetDown,I.mouseMove} + arrowIDCMP;
  58.  
  59.   mxIDCMP         * = LONGSET{I.gadgetDown};
  60.   numberIDCMP     * = LONGSET{};
  61.   cycleIDCMP      * = LONGSET{I.gadgetUp};
  62.   paletteIDCMP    * = LONGSET{I.gadgetUp};
  63.  
  64. (*  Use arrowIDCMP + scrollerIDCMP if your scrollers have arrows: *)
  65.   scrollerIDCMP   * = LONGSET{I.gadgetUp,I.gadgetDown,I.mouseMove};
  66.   sliderIDCMP     * = LONGSET{I.gadgetUp,I.gadgetDown,I.mouseMove};
  67.   stringIDCMP     * = LONGSET{I.gadgetUp};
  68.  
  69.   textIDCMP       * = LONGSET{};
  70.  
  71. (*------------------------------------------------------------------------*)
  72.  
  73. TYPE
  74.  
  75.   VisualInfo * = UNTRACED POINTER TO STRUCT END;   (* returned by GetVisualInfo() *)
  76.  
  77. (*  Generic NewGadget used by several of the gadget classes: *)
  78.  
  79.   NewGadgetPtr * = UNTRACED POINTER TO NewGadget;
  80.   NewGadget * = STRUCT
  81.     leftEdge * , topEdge * : INTEGER;       (*  gadget position *)
  82.     width * , height * : INTEGER;           (*  gadget size *)
  83.     gadgetText * : e.LSTRPTR;               (*  gadget label *)
  84.     textAttr * : g.TextAttrPtr;             (*  desired font for gadget label *)
  85.     gadgetID * : INTEGER;                   (*  gadget ID *)
  86.     flags * : LONGSET;                      (*  see below *)
  87.     visualInfo * : VisualInfo;              (*  Set to retval of GetVisualInfo() *)
  88.     userData * : e.APTR;                    (*  gadget UserData *)
  89.   END;
  90.  
  91. CONST
  92.  
  93. (* NewGadsget.flags control certain aspects of the gadget.  The first five
  94.  * the placement of the descriptive text.  Each gadget kind has its default,
  95.  * which is usually PLACETEXT_LEFT.  Consult the autodocs for details.
  96.  *)
  97.  
  98.   placeTextLeft   * = 0;  (* Right-align text on left side *)
  99.   placeTextRight  * = 1;  (* Left-align text on right side *)
  100.   placeTextAbove  * = 2;  (* Center text above *)
  101.   placeTextBelow  * = 3;  (* Center text below *)
  102.   placeTextIn     * = 4;  (* Center text on *)
  103.  
  104.   highLabel       * = 5;  (* Highlight the label *)
  105.  
  106. (*------------------------------------------------------------------------*)
  107.  
  108. TYPE
  109.  
  110. (* Fill out an array of these and pass that to CreateMenus(): *)
  111.  
  112.   NewMenuPtr * = UNTRACED POINTER TO NewMenu;
  113.   NewMenu * = STRUCT
  114.     type * : SHORTINT;              (*  See below *)
  115.     label * : e.LSTRPTR;            (*  Menu's label *)
  116.     commKey * : e.LSTRPTR;          (*  MenuItem Command Key Equiv *)
  117.     flags * : SET;                  (*  Menu or MenuItem flags (see note) *)
  118.     mutualExclude * : LONGSET;      (*  MenuItem MutualExclude word *)
  119.     userData * : e.APTR;            (*  For your own use, see note *)
  120.   END;
  121.  
  122. CONST
  123. (* Needed only by inside IM_ definitions below *)
  124.   menuImage * = -128;
  125.  
  126. (* nm_Type determines what each NewMenu structure corresponds to.
  127.  * for the NM_TITLE, NM_ITEM, and NM_SUB values, nm_Label should
  128.  * be a text string to use for that menu title, item, or sub-item.
  129.  * For IM_ITEM or IM_SUB, set nm_Label to point at the Image structure
  130.  * you wish to use for this item or sub-item.
  131.  * NOTE: At present, you may only use conventional images.
  132.  * Custom images created from Intuition image-classes do not work.
  133.  *)
  134.   title     * = 1;          (* Menu header *)
  135.   item      * = 2;          (* Textual menu item *)
  136.   sub       * = 3;          (* Textual menu sub-item *)
  137.  
  138.   imItem    * = item + menuImage;  (* Graphical menu item *)
  139.   imSub     * = sub  + menuImage;  (* Graphical menu sub-item *)
  140.  
  141. (* The NewMenu array should be terminated with a NewMenu whose
  142.  * nm_Type equals NM_END.
  143.  *)
  144.   end       * = 0;          (* End of NewMenu array *)
  145.  
  146. (* Starting with V39, GadTools will skip any NewMenu entries whose
  147.  * nm_Type field has the NM_IGNORE bit set.
  148.  *)
  149.   nmIgnore  * = 64;
  150.  
  151. (* nm_Label should be a text string for textual items, a pointer
  152.  * to an Image structure for graphical menu items, or the special
  153.  * constant NM_BARLABEL, to get a separator bar.
  154.  *)
  155.   barLabel  * = SYSTEM.VAL(e.LSTRPTR,-1);
  156.  
  157.  
  158. (* The nm_Flags field is used to fill out either the Menu->Flags or
  159.  * MenuItem->Flags field.  Note that the sense of the MENUENABLED or
  160.  * ITEMENABLED bit is inverted between this use and Intuition's use,
  161.  * in other words, NewMenus are enabled by default.  The following
  162.  * labels are provided to disable them:
  163.  *)
  164.   menuDisabled * = I.menuEnabled;
  165.   itemDisabled * = I.itemEnabled;
  166.  
  167. (* New for V39:  NM_COMMANDSTRING.  For a textual MenuItem or SubItem,
  168.  * point nm_CommKey at an arbitrary string, and set the NM_COMMANDSTRING
  169.  * flag.
  170.  *)
  171.   commandString * = I.commSeq;
  172.  
  173. (* The following are pre-cleared (COMMSEQ, ITEMTEXT, and HIGHxxx are set
  174.  * later as appropriate):
  175.  * Under V39, the COMMSEQ flag bit is not cleared, since it now has
  176.  * meaning.
  177.  *)
  178.   flagMask    * = -({I.commSeq,I.itemText}+I.highFlags);
  179.   flagMaskV39 * = -({I.itemText}+I.highFlags);
  180.  
  181. (* You may choose among CHECKIT, MENUTOGGLE, and CHECKED.
  182.  * Toggle-select menuitems are of type CHECKIT|MENUTOGGLE, along
  183.  * with CHECKED if currently selected.        Mutually exclusive ones
  184.  * are of type CHECKIT, and possibly CHECKED too.  The nm_MutualExclude
  185.  * is a bit-wise representation of the items excluded by this one,
  186.  * so in the simplest case (choose 1 among n), these flags would be
  187.  * ~1, ~2, ~4, ~8, ~16, etc.  See the Intuition Menus chapter.
  188.  *)
  189.  
  190. (*  These return codes can be obtained through the GTMN_ErrorCode tag *)
  191.   gtMenuTrimmed   * = 000000001H;      (* Too many menus, items, or subitems,
  192.                                         * menu has been trimmed down
  193.                                         *)
  194.   gtMenuInvalide  * = 000000002H;      (* Invalid NewMenu array *)
  195.   gtMenuNoMem     * = 000000003H;      (* Out of memory *)
  196.  
  197. (*------------------------------------------------------------------------*)
  198.  
  199. (* Starting with V39, checkboxes and mx gadgets can be scaled to your
  200.  * specified gadget width/height.  Use the new GTCB_Scaled or GTMX_Scaled
  201.  * tags, respectively.        Under V37, and by default in V39, the imagery
  202.  * is of the following fixed size:
  203.  *)
  204.  
  205. (* MX gadget default dimensions: *)
  206.   mxWidth        * = 17;
  207.   mxHeight       * =  9;
  208.  
  209. (* Checkbox default dimensions: *)
  210.   checkboxWidth  * = 26;
  211.   checkboxHeight * = 11;
  212.  
  213.  
  214. (*------------------------------------------------------------------------*)
  215.  
  216. (*  Tags for toolkit functions: *)
  217.  
  218.   tagBase           * = u.user + 80000H;
  219.  
  220.   viNewWindow       * = tagBase+1;   (* Unused *)
  221.   viNWTags          * = tagBase+2;   (* Unused *)
  222.  
  223.   Private0            = tagBase+3;   (* (private) *)
  224.  
  225.   cbChecked         * = tagBase+4;   (* State of checkbox *)
  226.  
  227.   lvTop             * = tagBase+5;   (* Top visible one in listview *)
  228.   lvLabels          * = tagBase+6;   (* List to display in listview *)
  229.  
  230.   noList * = SYSTEM.VAL(e.ListPtr,-1); (* for short list locking (see RKMs) *)
  231.  
  232.   lvReadOnly        * = tagBase+7;   (* TRUE if listview is to be
  233.                                       * read-only
  234.                                       *)
  235.   lvScrollWidth     * = tagBase+8;   (* Width of scrollbar *)
  236.  
  237.   mxLabels          * = tagBase+9;   (* NULL-terminated array of labels *)
  238.   mxActive          * = tagBase+10;  (* Active one in mx gadget *)
  239.  
  240.   txText            * = tagBase+11;  (* Text to display *)
  241.   txCopyText        * = tagBase+12;  (* Copy text label instead of referencing it *)
  242.  
  243.   nmNumber          * = tagBase+13;  (* Number to display *)
  244.  
  245.   cyLabels          * = tagBase+14;  (* NULL-terminated array of labels *)
  246.   cyActive          * = tagBase+15;  (* The active one in the cycle gad *)
  247.  
  248.   paDepth           * = tagBase+16;  (* Number of bitplanes in palette *)
  249.   paColor           * = tagBase+17;  (* Palette color *)
  250.   paColorOffset     * = tagBase+18;  (* First color to use in palette *)
  251.   paIndicatorWidth  * = tagBase+19;  (* Width of current-color indicator *)
  252.   paIndicatorHeight * = tagBase+20;  (* Height of current-color indicator *)
  253.  
  254.   scTop             * = tagBase+21;  (* Top visible in scroller *)
  255.   scTotal           * = tagBase+22;  (* Total in scroller area *)
  256.   scVisible         * = tagBase+23;  (* Number visible in scroller *)
  257.   scOverlap         * = tagBase+24;  (* Unused *)
  258.  
  259. (*  tagBase+25 through tagBase+37 are reserved *)
  260.  
  261.   slMin             * = tagBase+38;  (* Slider min value *)
  262.   slMax             * = tagBase+39;  (* Slider max value *)
  263.   slLevel           * = tagBase+40;  (* Slider level *)
  264.   slMaxLevelLen     * = tagBase+41;  (* Max length of printed level *)
  265.   slLevelFormat     * = tagBase+42;  (* Format string for level *)
  266.   slLevelPlace      * = tagBase+43;  (* Where level should be placed *)
  267.   slDispFunc        * = tagBase+44;  (* Callback for number calculation
  268.                                       * before display
  269.                                       *)
  270.   stString          * = tagBase+45;  (* String gadget's displayed string *)
  271.   stMaxChars        * = tagBase+46;  (* Max length of string *)
  272.  
  273.   inNumber          * = tagBase+47;  (* Number in integer gadget *)
  274.   inMaxChars        * = tagBase+48;  (* Max number of digits *)
  275.  
  276.   mnTextAttr        * = tagBase+49;  (* MenuItem font TextAttr *)
  277.   mnFrontPen        * = tagBase+50;  (* MenuItem text pen color *)
  278.  
  279.   bbRecessed        * = tagBase+51;  (* Make BevelBox recessed *)
  280.  
  281.   visualInfo        * = tagBase+52;  (* result of VisualInfo call *)
  282.  
  283.   lvShowSelected    * = tagBase+53;  (* show selected entry beneath
  284.          * listview, set tag data = NULL for display-only, or pointer
  285.          * to a string gadget you've created
  286.          *)
  287.   lvSelected        * = tagBase+54;  (* Set ordinal number of selected
  288.                                       * entry in the list
  289.                                       *)
  290.   Reserved1         * = tagBase+56;  (* Reserved for future use *)
  291.  
  292.   txBorder          * = tagBase+57;  (* Put a border around
  293.                                       * Text-display gadgets
  294.                                       *)
  295.   nmBorder          * = tagBase+58;  (* Put a border around
  296.                                       * Number-display gadgets
  297.                                       *)
  298.   scArrows          * = tagBase+59;  (* Specify size of arrows for
  299.                                       * scroller
  300.                                       *)
  301.   mnMenu            * = tagBase+60;  (* Pointer to Menu for use by
  302.                                       * LayoutMenuItems()
  303.                                       *)
  304.   mxSpacing         * = tagBase+61;  (* Added to font height to
  305.          * figure spacing between mx choices.  Use this instead
  306.          * of LAYOUTA_SPACING for mx gadgets.
  307.          *)
  308.  
  309. (* New to V37 GadTools.  Ignored by GadTools V36 *)
  310.   fullMenu          * = tagBase+62;  (* Asks CreateMenus() to validate that this
  311.                                       * is a complete menu structure
  312.                                       *)
  313.   secondaryError    * = tagBase+63;  (* ti_Data is a pointer to a ULONG to receive
  314.                                       * error reports from CreateMenus()
  315.                                       *)
  316.   underscore        * = tagBase+64;  (* ti_Data points to the symbol that preceeds
  317.                                       * the character you'd like to underline in a
  318.                                       * gadget label
  319.                                       *)
  320.  
  321.   stEditHook        * = tagBase+55; (* String EditHook *)
  322.   inEditHook        * = stEditHook; (* Same thing, different name, just to
  323.                                      * round out INTEGER_KIND gadgets
  324.                                      *)
  325.  
  326. (* New to V39 GadTools.  Ignored by GadTools V36 and V37 *)
  327.   mnCheckMark       * = tagBase+65; (* ti_Data is checkmark img to use *)
  328.   mnAmigaKey        * = tagBase+66; (* ti_Data is Amiga-key img to use *)
  329.   mnNewLookMenus    * = tagBase+67; (* ti_Data is boolean *)
  330.  
  331. (* New to V39 GadTools.  Ignored by GadTools V36 and V37.
  332.  * Set to TRUE if you want the checkbox or mx image scaled to
  333.  * the gadget width/height you specify.  Defaults to FALSE,
  334.  * for compatibility.
  335.  *)
  336.   cbScaled          * = tagBase+68; (* ti_Data is boolean *)
  337.   mxScaled          * = tagBase+69; (* ti_Data is boolean *)
  338.  
  339.   paNumColors       * = tagBase+70; (* Number of colors in palette *)
  340.  
  341.   mxTitlePlace      * = tagBase+71; (* Where to put the title *)
  342.  
  343.   txFrontPen        * = tagBase+72; (* Text color in TEXT_KIND gad *)
  344.   txBackPen         * = tagBase+73; (* Bgrnd color in TEXT_KIND gad *)
  345.   txJustification   * = tagBase+74; (* See GTJ_#? constants *)
  346.  
  347.   nmFrontPen        * = tagBase+72; (* Text color in NUMBER_KIND gad *)
  348.   nmBackPen         * = tagBase+73; (* Bgrnd color in NUMBER_KIND gad *)
  349.   nmJustification   * = tagBase+74; (* See GTJ_#? constants *)
  350.   nmFormat          * = tagBase+75; (* Formatting string for number *)
  351.   nmMaxNumberLen    * = tagBase+76; (* Maximum length of number *)
  352.  
  353.   bbFrameType       * = tagBase+77; (* defines what kind of boxes
  354.                                      * DrawBevelBox() renders. See
  355.                                      * the BBFT_#? constants for
  356.                                      * possible values
  357.                                      *)
  358.  
  359.   lvMakeVisible     * = tagBase+78; (* Make this item visible *)
  360.   lvItemHeight      * = tagBase+79; (* Height of an individual item *)
  361.  
  362.   slMaxPixelLen     * = tagBase+80; (* Max pixel size of level display *)
  363.   slJustification   * = tagBase+81; (* how should the level be displayed *)
  364.  
  365.   paColorTable      * = tagBase+82; (* colors to use in palette *)
  366.  
  367.   lvCallBack        * = tagBase+83; (* general-purpose listview call back *)
  368.   lvMaxPen          * = tagBase+84; (* maximum pen number used by call back *)
  369.  
  370.   txClipped         * = tagBase+85; (* make a TEXT_KIND clip text *)
  371.   nmClipped         * = tagBase+85; (* make a NUMBER_KIND clip text *)
  372.  
  373. (* Old definition, now obsolete: *)
  374.   Reserved0         * = stEditHook;
  375.  
  376. (*------------------------------------------------------------------------*)
  377.  
  378. (* Justification types for GTTX_Justification and GTNM_Justification tags *)
  379.   jLeft   * = 0;
  380.   jRight  * = 1;
  381.   jCenter * = 2;
  382.  
  383. (*------------------------------------------------------------------------*)
  384.  
  385. (* Bevel box frame types for GTBB_FrameType tag *)
  386.   bbftButton      * = 1;  (* Standard button gadget box *)
  387.   bbftRidge       * = 2;  (* Standard string gadget box *)
  388.   bbftIconDropBox * = 3;  (* Standard icon drop box     *)
  389.  
  390. (*------------------------------------------------------------------------*)
  391.  
  392. (* Typical suggested spacing between "elements": *)
  393.   interWidth  * = 8;
  394.   interHeight * = 4;
  395.  
  396. (*------------------------------------------------------------------------*)
  397.  
  398. (*  "nWay" is an old synonym for cycle gadgets *)
  399.   nWAYKind     * = cycleKind;
  400.   nWAYIDCMP    * = cycleIDCMP;
  401.   nwLabels     * = cyLabels;
  402.   nwActive     * = cyActive;
  403.  
  404. (*------------------------------------------------------------------------*)
  405.  
  406. (* These two definitions are obsolete, but are here for backwards
  407.  * compatibility.  You never need to worry about these:
  408.  *)
  409.   gadToolBit  * = 08000H;
  410.  
  411. (*------------------------------------------------------------------------*)
  412.  
  413. (* These definitions are for the GTLV_CallBack tag *)
  414.  
  415. (* The different types of messages that a listview callback hook can see *)
  416.   lvDraw      * =  0202H;  (* draw yourself, with state *)
  417.  
  418. (* Possible return values from a callback hook *)
  419.   lvcbOk      * =  0;     (* callback understands this message type    *)
  420.   lvcbUnknown * =  1;     (* callback does not understand this message *)
  421.  
  422. (* states for LVDrawMsg.lvdm_State *)
  423.   lvrNormal           * = 0; (* the usual                 *)
  424.   lvrSelected         * = 1; (* for selected gadgets      *)
  425.   lvrNormalDisabled   * = 2; (* for disabled gadgets      *)
  426.   lvrSelectedDisabled * = 8; (* disabled and selected     *)
  427.  
  428. TYPE
  429. (* structure of LV_DRAW messages, object is a (struct Node * ) *)
  430.   LVDrawMsg * = STRUCT (msg *: I.Msg)
  431.     rastPort * : g.RastPortPtr;   (* where to render to        *)
  432.     drawInfo * : I.DrawInfoPtr;   (* useful to have around     *)
  433.     bounds   * : g.Rectangle;     (* limits of where to render *)
  434.     state    * : LONGINT;         (* how to render             *)
  435.   END;
  436.  
  437. VAR
  438.   base * : e.LibraryPtr;
  439.  
  440. (*--- functions in V36 or higher (Release 2.0) ---*)
  441. (*
  442.  * Gadget Functions
  443.  *)
  444. PROCEDURE CreateGadgetA   *{base,- 30}(kind{0}        : LONGINT;
  445.                                        gad{8}         : I.GadgetPtr;
  446.                                        VAR ng{9}      : NewGadget;
  447.                                        taglist{10}    : ARRAY OF u.TagItem): I.GadgetPtr;
  448. PROCEDURE CreateGadget    *{base,- 30}(kind{0}        : LONGINT;
  449.                                        gad{8}         : I.GadgetPtr;
  450.                                        VAR ng{9}      : NewGadget;
  451.                                        tag1{10}..     : u.Tag): I.GadgetPtr;
  452. PROCEDURE FreeGadgets     *{base,- 36}(gad{8}         : I.GadgetPtr);
  453. PROCEDURE SetGadgetAttrsA *{base,- 42}(VAR gad{8}     : I.Gadget;
  454.                                        win{9}         : I.WindowPtr;
  455.                                        req{10}        : I.RequesterPtr;
  456.                                        taglist{11}    : ARRAY OF u.TagItem);
  457. PROCEDURE SetGadgetAttrs  *{base,- 42}(VAR gad{8}     : I.Gadget;
  458.                                        win{9}         : I.WindowPtr;
  459.                                        req{10}        : I.RequesterPtr;
  460.                                        tag1{11}..     : u.Tag);
  461. (*
  462.  * Menu functions
  463.  *)
  464. PROCEDURE CreateMenusA    *{base,- 48}(newmenu{8}     : ARRAY OF NewMenu;
  465.                                        taglist{9}     : ARRAY OF u.TagItem): I.MenuPtr;
  466. PROCEDURE CreateMenus     *{base,- 48}(newmenu{8}     : ARRAY OF NewMenu;
  467.                                        tag1{9}..      : u.Tag): I.MenuPtr;
  468. PROCEDURE CreateMenusAB   *{base,- 48}(newmenu{8}     : NewMenuPtr;
  469.                                        taglist{9}     : ARRAY OF u.TagItem): I.MenuPtr;
  470. PROCEDURE CreateMenusB    *{base,- 48}(newmenu{8}     : NewMenuPtr;
  471.                                        tag1{9}..      : u.Tag): I.MenuPtr;
  472. PROCEDURE FreeMenus       *{base,- 54}(menu{8}        : I.MenuPtr);
  473. PROCEDURE LayoutMenuItemsA*{base,- 60}(firstitem{8}   : I.MenuItemPtr;
  474.                                        vi{9}          : VisualInfo;
  475.                                        tagList{10}    : ARRAY OF u.TagItem): BOOLEAN;
  476. PROCEDURE LayoutMenuItems *{base,- 60}(firstitem{8}   : I.MenuItemPtr;
  477.                                        vi{9}          : VisualInfo;
  478.                                        tag1{10}..     : u.Tag): BOOLEAN;
  479. PROCEDURE LayoutMenusA    *{base,- 66}(firstmenu{8}   : I.MenuPtr;
  480.                                        vi{9}          : VisualInfo;
  481.                                        taglist{10}    : ARRAY OF u.TagItem): BOOLEAN;
  482. PROCEDURE LayoutMenus     *{base,- 66}(firstmenu{8}   : I.MenuPtr;
  483.                                        vi{9}          : VisualInfo;
  484.                                        tag1{10}..     : u.Tag): BOOLEAN;
  485. (*
  486.  * Misc Event-Handling Functions
  487.  *)
  488. PROCEDURE GetIMsg         *{base,- 72}(iport{8}       : e.MsgPortPtr): I.IntuiMessagePtr;
  489. PROCEDURE ReplyIMsg       *{base,- 78}(imsg{9}        : I.IntuiMessagePtr);
  490. PROCEDURE RefreshWindow   *{base,- 84}(win{8}         : I.WindowPtr;
  491.                                        req{9}         : I.RequesterPtr);
  492. PROCEDURE BeginRefresh    *{base,- 90}(win{8}         : I.WindowPtr);
  493. PROCEDURE EndRefresh      *{base,- 96}(win{8}         : I.WindowPtr;
  494.                                        complete{0}    : I.LONGBOOL);
  495. PROCEDURE FilterIMsg      *{base,-102}(imsg{9}        : I.IntuiMessagePtr): I.IntuiMessagePtr;
  496. PROCEDURE PostFilterIMsg  *{base,-108}(imsg{9}        : I.IntuiMessagePtr): I.IntuiMessagePtr;
  497. PROCEDURE CreateContext   *{base,-114}(VAR glist{8}   : I.GadgetPtr): I.GadgetPtr;
  498. (*
  499.  * Rendering Functions
  500.  *)
  501. PROCEDURE DrawBevelBoxA   *{base,-120}(rport{8}       : g.RastPortPtr;
  502.                                        left{0}        : LONGINT;
  503.                                        top{1}         : LONGINT;
  504.                                        width{2}       : LONGINT;
  505.                                        height{3}      : LONGINT;
  506.                                        taglist{9}     : ARRAY OF u.TagItem);
  507. PROCEDURE DrawBevelBox    *{base,-120}(rport{8}       : g.RastPortPtr;
  508.                                        left{0}        : LONGINT;
  509.                                        top{1}         : LONGINT;
  510.                                        width{2}       : LONGINT;
  511.                                        height{3}      : LONGINT;
  512.                                        tag1{9}..      : u.Tag);
  513. (*
  514.  * Visuals Functions
  515.  *)
  516. PROCEDURE GetVisualInfoA  *{base,-126}(screen{8}      : I.ScreenPtr;
  517.                                        taglist{9}     : ARRAY OF u.TagItem): VisualInfo;
  518. PROCEDURE GetVisualInfo   *{base,-126}(screen{8}      : I.ScreenPtr;
  519.                                        tag1{9}..      : u.Tag): VisualInfo;
  520. PROCEDURE FreeVisualInfo  *{base,-132}(vi{8}          : VisualInfo);
  521.  
  522. (*--- functions in V39 or higher (Release 3) ---*)
  523.  
  524. PROCEDURE GetGadgetAttrsA *{base,-0AEH}(gad{8}        : I.GadgetPtr;
  525.                                         win{9}        : I.WindowPtr;
  526.                                         req{10}       : I.RequesterPtr;
  527.                                         taglist{11}   : ARRAY OF u.TagItem): LONGINT;
  528. PROCEDURE GetGadgetAttrs  *{base,-0AEH}(gad{8}        : I.GadgetPtr;
  529.                                         win{9}        : I.WindowPtr;
  530.                                         req{10}       : I.RequesterPtr;
  531.                                         tag1{11}..    : u.Tag ): LONGINT;
  532.  
  533. (* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
  534.  
  535. (* A UserData pointer can be associated with each Menu and MenuItem structure.
  536.  * The CreateMenus() call allocates space for a UserData after each
  537.  * Menu or MenuItem (header, item or sub-item).  You should use the
  538.  * GTMENU_USERDATA() or GTMENUITEM_USERDATA() macro to extract it.
  539.  *)
  540.  
  541. PROCEDURE MenuUserData * (menu{8}: I.MenuPtr): e.APTR;
  542. TYPE UserMenu = STRUCT (menu: I.Menu) userData: e.APTR; END;
  543. BEGIN RETURN menu(UserMenu).userData; END MenuUserData;
  544.  
  545.  
  546. PROCEDURE MenuItemUserData * (menuitem{8}: I.MenuItemPtr): e.APTR;
  547. TYPE UserItem = STRUCT (menu: I.MenuItem) userData: e.APTR; END;
  548. BEGIN RETURN menuitem(UserItem).userData; END MenuItemUserData;
  549.  
  550.  
  551. BEGIN
  552.   base := e.OpenLibrary(gadtoolsName,37);
  553.  
  554. CLOSE
  555.   IF base#NIL THEN e.CloseLibrary(base) END;
  556.  
  557. END GadTools.
  558.  
  559.